home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 15
/
Aminet 15 - Nov 1996.iso
/
Aminet
/
comm
/
bbs
/
s342q16.lha
/
recover1.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-08-29
|
3KB
|
138 lines
/*
* recover1.c
*
* Recovery program for recovering killed rooms. This only works for room
* slots which have only been killed; if the slot has been recycled (reclaimed
* by makeRoom), a different program will be needed for recovery.
*/
/*
* history
*
* 87Oct11 HAW V3 update.
* 85Nov16 HAW Modified for MS-DOS libraries.
* 85Apr10 HAW Converted to MS-DOS.
* 84Jun17 HAW Seems to work correctly.
* 84Jun17 HAW Created.
*/
#include "ctdl.h" /* header file */
#include "fctype.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <time.h>
#include <proto/exec.h>
#include <dos/dos.h>
#include <pragmas/dos_pragmas.h>
#include "exec/memory.h"
#include "exec/ports.h"
#include "exec/exec.h"
/*
* contents
*
* crashout() irrecoverable error
* main() main controller for this program
* noteRoom() enter room into RAM index
* openFile() opens a .sys file
*/
extern rTable *roomTab; /* RAM index of rooms */
extern aRoom roomBuf; /* room buffer */
extern FILE *roomfl; /* file descriptor for rooms */
extern int thisRoom; /* room currently in roomBuf */
extern CONFIG cfg; /* A buncha variables */
FILE *fopen();
int UtilGetch(void);
int mPrintf(char *format, ...) {return 0; } /* stub to quiet the linker */
/*
* crashout()
*
* This handles the irrecoverable error.
*/
void crashout(str)
char *str;
{
exit(printf(str));
}
/*
* main()
*
* The main controller.
*/
int main(void);
int main()
{
SYS_FILE roomFile;
int Index;
char c;
cfg.weAre = UTILITY;
printf("RECOVER1 - %s\n\nGot problems, eh? Hang on a moment...\n",
COPYRIGHT);
if (readSysTab(TRUE, TRUE)) {
mvToHomeDisk(&cfg.homeArea);
if (access(LOCKFILE, 0) != ERROR) {
printf("Please do not run Recover1 using Outside Commands.\n");
writeSysTab();
exit(1);
}
makeSysName(roomFile, "ctdlroom.sys", &cfg.roomArea);
openFile(roomFile, &roomfl);
initRoomBuf(&roomBuf);
for (Index = AIDEROOM + 1; /* First 3 ALWAYS exist */
Index < MAXROOMS; Index++) {
if (!(roomTab[Index].rtflags.INUSE) && roomTab[Index].rtname[0]) {
printf("The room named %s may be recoverable. ",
roomTab[Index].rtname);
printf("Do you want me to try? ");
c = UtilGetch();
if (toupper(c) == 'Y') {
getRoom(Index);
roomBuf.rbflags.INUSE = TRUE;
putRoom(Index);
noteRoom();
}
putchar('\n');
}
}
printf("\n\nAll finished! Saving... No need to reconfigure.");
writeSysTab();
}
return 0;
}
/*
* noteRoom()
*
* This function will enter a room into RAM index array.
*/
void noteRoom()
{
int i;
MSG_NUMBER last;
last = 0l;
for (i = 0; i < MSGSPERRM; i++) {
if (roomBuf.msg[i].rbmsgNo > last) {
last = roomBuf.msg[i].rbmsgNo;
}
}
roomTab[thisRoom].rtlastMessage = last ;
strCpy(roomTab[thisRoom].rtname, roomBuf.rbname) ;
roomTab[thisRoom].rtgen = roomBuf.rbgen ;
roomTab[thisRoom].rtflags.INUSE = roomBuf.rbflags.INUSE;
roomTab[thisRoom].rtflags.PUBLIC = roomBuf.rbflags.PUBLIC;
roomTab[thisRoom].rtflags.ISDIR = roomBuf.rbflags.ISDIR;
roomTab[thisRoom].rtflags.PERMROOM = roomBuf.rbflags.PERMROOM;
roomTab[thisRoom].rtflags.SKIP = roomBuf.rbflags.SKIP;
roomTab[thisRoom].rtFlIndex = roomBuf.rbFlIndex;
}